

import java.util.ArrayList;
import java.util.Scanner;
/**
 * Driver Program para el sistema de parqueos con la implementacion
 * de una stack
 */

/**
 *
 * @author David Coronado
 */
public class DriverProgram {

    public static void main(String[] args) {

        Stack<String> parqueo = new ListStack();
        Scanner scan = new Scanner(System.in);
        String input;
        boolean correct = true;
        char op;

        System.out.println("*---------------------------------------*");
        System.out.println("|                                       |");
        System.out.println("|     ~~~SISTEMA DE PARQUEO \"DC\"~~~     |");
        System.out.println("|                                       |");
        System.out.println("*---------------------------------------*");

        /**
         * Despliegue del menu del programa
         */
        do {

            do {
                System.out.println("\na. Ingresar un vehiculo al parqueo");
                System.out.println("d. Sacar un carro del parqueo");
                System.out.println("0. Salir del Programa");
                System.out.println("1. Ver el estado del parqueo");
                System.out.println("\nSeleccione una opcion...");

                input = scan.next();
                input = input.toLowerCase();
                if (input.length() != 1) {
                    System.out.println("Error!... Opcion invalida");
                    correct = false;
                }
            } while (correct == false);

            op = input.charAt(0);

            switch (op) {
                case 'a':
                     {
                        /**
                         * Se requiere la placa del vehiculo para estacionarlo
                         */
                        System.out.println("Ingrese el # de placa del vehiculo");
                        String placa1 = scan.next();
                        try {
                            parqueo.push(placa1);
                            System.out.println("\nSu carro ha sido parqueado satisfactoriamente.");
                        } catch (Exception e) {
                            System.out.println(e);
                        }
                    }
                    break;
                case 'd':
                     {
                         /**
                          * Se ingresa la placa del vehiculo y el estacionamiento en el que se encuentra
                          */
                        ArrayList<String> temp = new ArrayList();
                        String target;
                        int cont = 0;
                        System.out.println("\nIngrese el numero de placa del vehiculo a retirar");
                        String placa2 = scan.next();
                        placa2.toUpperCase();
                        System.out.println("Ingrese la posicion en la que se encuentra el vehiculo");
                        int pos = scan.nextInt();

                        try {
                            /**
                             * Se chequea que el automovil con placa x (la placa ingresada)
                             * este en el parqueo indicado
                             */
                            for(int i=1 ; i<pos ; i++){
                                temp.add(parqueo.pop());
                                cont++;
                            }
                            
                            target = parqueo.pop();
                            
                            for(int k=0 ; k<cont ; k++){
                                parqueo.push(temp.get(0));
                            }
                            
                                System.out.println("\nEl automovil \'" + target + "\' ha sido retirado del parqueo");
                                System.out.println("Aviso!... Los automoviles se han reorganizado...");
                                
                        } catch (Exception e) {
                            System.out.println(e);
                        }
                    }
                    break;
                case '1':
                    /**
                     * Se muestra el estado del parqueo
                     */
                     {
                      System.out.println(parqueo.toString());   
                    }break;
            }

        } while (op != '0');
        
        System.out.println("\nFin del Programa...");


    }
}
